package com.vcoud.mundialbrasil2014;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import android.database.Cursor;
import android.database.SQLException;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ExpandableListView;

import com.vcoud.mbrasil2014.R;
import com.vcoud.mundialbrasil2014.adapter.EstadisticasAdapter;

public class EstadisticasFragment extends Fragment {
	List<String> listaGrupo;
	List<String> listaHijo;
	Map<String, ArrayList<HashMap<String, String>>> coleccionGrupo;
	ExpandableListView listaExpandible;
	DB db;
	static final String KEY_JUGADOR_IDJUGADOR = "IDJugador";
	static final String KEY_JUGADOR_NOMBRE = "Nombre";
	static final String KEY_JUGADOR_APELLIDO = "Apellido";
	static final String KEY_JUGADOR_DESCRIPCION = "Descripcion";
	static final String KEY_JUGADOR_CLUB = "Club";
	static final String KEY_JUGADOR_NUMERO = "Numero";
	static final String KEY_JUGADOR_POSICION = "Posicion";
	static final String KEY_JUGADOR_FOTO = "Foto";
	static final String KEY_JUGADOR_FK_EQUIPO = "FK_Equipo";
	static final String KEY_JUGADOR_GOL = "Gol";
	static final String KEY_JUGADOR_ASISTENCIA = "Asistencia";
	static final String KEY_JUGADOR_TARJETAAMARILLA = "TarjetaAmarilla";
	static final String KEY_JUGADOR_TARJETAROJA = "TarjetaRoja";
	static final String KEY_JUGADOR_CAPITAN = "Capitan";
	static final String KEY_JUGADOR_LESIONADO = "Lesionado";

	static final String KEY_TIPO = "Tipo";

	static final String KEY_EQUIPO_NOMBRE = "NombreEquipo";

	public EstadisticasFragment() {
	}

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setHasOptionsMenu(true);
	}

	@Override
	public void onPrepareOptionsMenu(Menu menu) {
		menu.findItem(R.id.action_refresh).setVisible(false);
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View rootView = inflater.inflate(R.layout.fragment_estadisticas,
				container, false);

		crearGrupo();
		crearColeccion();
		listaExpandible = (ExpandableListView) rootView
				.findViewById(R.id.lista_estadisticas);
		final EstadisticasAdapter adapter = new EstadisticasAdapter(
				getActivity(), listaGrupo, coleccionGrupo);
		listaExpandible.setAdapter(adapter);
		// activar codigo para expandir todos los grupos por default
		for (int i = 0; i < listaGrupo.size(); i++) {
			listaExpandible.expandGroup(i);
		}
		return rootView;
	}

	@Override
	public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
		super.onCreateOptionsMenu(menu, inflater);
		getActivity().getMenuInflater().inflate(R.menu.grupos, menu);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar actions click
		switch (item.getItemId()) {
		case R.id.grupos_expandir:
			for (int i = 0; i < listaGrupo.size(); i++) {
				listaExpandible.expandGroup(i);
			}
			return true;
		case R.id.grupos_contraer:
			for (int i = 0; i < listaGrupo.size(); i++) {
				listaExpandible.collapseGroup(i);
			}
		default:
			return super.onOptionsItemSelected(item);
		}
	}

	private void crearGrupo() {
		listaGrupo = new ArrayList<String>();
		listaGrupo.add("0_TOP " + getActivity().getString(R.string.goleadores));
	}

	private void crearColeccion() {
		coleccionGrupo = new LinkedHashMap<String, ArrayList<HashMap<String, String>>>();
		db = new DB(getActivity());
		db.abrir();
		for (String grupo : listaGrupo) {
			String[] grupoTipo = grupo.split("_");
			int tipo = Integer.valueOf(grupoTipo[0]);
			Cursor c;
			if (tipo == 0) {
				c = db.obtenerTopGoles();
			} else {
				c = db.obtenerTopJugadores(1);
			}
			ArrayList<HashMap<String, String>> tmpGrupo = new ArrayList<HashMap<String, String>>();
			if (c != null && c.getCount() > 0) {
				if (c.moveToFirst()) {
					do {
						HashMap<String, String> mGrupo = new HashMap<String, String>();
						try {
							Cursor mCursor = db.obtenerJugador(c.getLong(0));
							Cursor cE = db.obtenerEquipo(mCursor.getLong(8));

							mGrupo.put(KEY_JUGADOR_IDJUGADOR,
									mCursor.getString(0));
							mGrupo.put(KEY_JUGADOR_NOMBRE, mCursor.getString(1));
							mGrupo.put(KEY_JUGADOR_APELLIDO,
									mCursor.getString(2));
							mGrupo.put(KEY_JUGADOR_DESCRIPCION,
									mCursor.getString(3));
							mGrupo.put(KEY_JUGADOR_CLUB, mCursor.getString(4));
							mGrupo.put(KEY_JUGADOR_NUMERO, mCursor.getString(5));
							mGrupo.put(KEY_JUGADOR_POSICION,
									mCursor.getString(6));
							mGrupo.put(KEY_JUGADOR_FOTO, mCursor.getString(7));
							mGrupo.put(KEY_EQUIPO_NOMBRE, cE.getString(1));
							mGrupo.put(KEY_JUGADOR_GOL, c.getString(1));
							mGrupo.put(KEY_JUGADOR_ASISTENCIA,
									mCursor.getString(10));
							mGrupo.put(KEY_JUGADOR_TARJETAAMARILLA,
									mCursor.getString(11));
							mGrupo.put(KEY_JUGADOR_TARJETAROJA,
									mCursor.getString(12));
							mGrupo.put(KEY_JUGADOR_CAPITAN,
									mCursor.getString(13));
							mGrupo.put(KEY_JUGADOR_LESIONADO,
									mCursor.getString(14));
							mGrupo.put(KEY_TIPO, grupoTipo[0]);
							mCursor.close();
							cE.close();
						} catch (SQLException e) {
							e.printStackTrace();
						}
						tmpGrupo.add(mGrupo);
					} while (c.moveToNext());

					coleccionGrupo.put(grupo, tmpGrupo);
				}
			} else {
				HashMap<String, String> mGrupo = new HashMap<String, String>();
				mGrupo.put(KEY_JUGADOR_IDJUGADOR, "0");
				mGrupo.put(KEY_JUGADOR_NOMBRE, " ");
				mGrupo.put(KEY_TIPO, grupoTipo[0]);
				if (tipo == 0) {
					mGrupo.put(KEY_EQUIPO_NOMBRE,
							getActivity().getString(R.string.nohaydatos_gol));
					mGrupo.put(KEY_JUGADOR_GOL, "0");
				} else {
					mGrupo.put(
							KEY_EQUIPO_NOMBRE,
							getActivity().getString(
									R.string.nohaydatos_asistencia));
					mGrupo.put(KEY_JUGADOR_ASISTENCIA, "0");
				}
				tmpGrupo.add(mGrupo);
				coleccionGrupo.put(grupo, tmpGrupo);
			}
			c.close();
		}
		db.cerrar();
	}
}
